
/**
 * UI metadata interface.
 */
export interface UIMeta {
    /**
     * 所属层级
     */
    layer: number;
    /**
     * 被覆盖时的行为定义
     */
    cover: UICoverAction;
    /**
     * 显示到顶部的行为定义
     */
    backTop: UIBackTopAction;
}

/**
 * 被覆盖时的行为定义
 */
export enum UICoverAction {
    /**
     * 被覆盖时仍显示
     */
    SHOW,
    /**
     * 被覆盖时隐藏
     */
    HIDE,
    /**
     * 自定义行为，由子类处理
     */
    CUSTOM,
}

/**
 * 显示到顶部的行为定义
 */
export enum UIBackTopAction {
    /**
     * 被覆盖时仍显示
     */
    SHOW,
    /**
     * 被覆盖时隐藏
     */
    HIDE,
    /**
     * 自定义行为，由子类处理
     */
    CUSTOM,
}

/**
 * UI 状态枚举
 */
export enum UIState {
    /**
     * 无状态
     */
    NONE,
    /**
     * 显示中
     */
    SHOW,
    /**
     * 被覆盖
     */
    COVER,
    /**
     * 已关闭
     */
    CLOSE,
}

/**
 * UI 操作命令枚举
 */
export enum UICMD {
    /**
     * 显示一个界面
     */
    SHOW,
    /**
     * 关闭一个界面
     */
    CLOSE,
    /**
     * 关闭所有界面
     */
    CLOSE_ALL,
    /**
     * 返回到指定界面
     */
    BACKTO,
}

/**
 * UI 界面信息类
 */
export class UIInfo {
    /**
     * 对应代理名称
     */
    proxyName: string;

    /**
     * 当前界面状态
     */
    state: UIState = UIState.NONE;

    /**
     * 窗口唯一标识符
     */
    uuid: string;

    /**
     * 上次关闭时间戳（用于缓存控制）
     */
    closeTime: number = 0;

    /**
     * 界面额外数据（可携带参数、回调等）
     */
    extral?: UIExtral = null;

    constructor(proxyName: string) {
        this.proxyName = proxyName;
    }
}

/**
 * 界面额外数据结构体
 */
export class UIExtral {
    /**
     * 初始化传入的数据
     */
    data?: any;

    /**
     * 显示完成回调函数
     */
    showCallback?: Function;

    /**
     * 关闭完成回调函数
     */
    closeCallback?: Function;
}

/**
 * UI 命令对象
 */
export class UICommand {
    /**
     * 操作命令类型
     */
    cmd: UICMD;

    /**
     * 命令执行完成后回调
     */
    finishCallback?: Function;

    /**
     * 目标代理名
     */
    proxyName?: string;

    /**
     * 命令附加数据
     */
    extral?: UIExtral;
}